init function 可以用來對該程式進行一些初始化的動作.
透過 init 初始化變數 sum 為 10
package mymath
var sum int
func init() {
	sum = 10
}
func GetSum() int {
	return sum
}
func Add(num int) int {
	sum += num
	return sum
}
func Sub(num int) int {
	sum -= num
	return sum
}
目錄結構 :
goHello
 -src
  -util
   -mymath
    sumutil.go
  -practice
   example.go
根據上面放置的目錄結構 import sumutil.go 的 package 是 util/mymath
package main
import (
	"fmt"
	"util/mymath"
)
func main() {
	fmt.Println(mymath.GetSum()) // 10
	fmt.Println(mymath.Add(10))  // 20
	fmt.Println(mymath.Sub(5))   // 15
	fmt.Println(mymath.GetSum()) // 15
}
在宣告變數時,也要注意宣告的範圍 (scope) 也就是一個程式文字區域,在 compile 時就會先檢查.
會從最內層的區塊先開始查詢到全域的區塊,如果所有的範圍都找不到的話就會出現 undefined.
package main
import (
	"fmt"
)
var x string // 變數 x : 1
func init() {
	x = "sam!"
	fmt.Println(x)
}
func main() {
	x := "daniel!" // 變數 x : 2
	for i := 0; i < len(x); i++ {
		x := x[i] // 變數 x : 3
		if x != '!' {
			x := x + 'A' - 'a' // 變數 x : 4
			fmt.Printf("%c , ", x)
		}
		fmt.Println(x)
		// fmt.Println(y) // undefined: y
	}
	fmt.Println(x)
}
在上面的範例裡 4 個不同變數 x 都出現在不同的程式區塊裡,
而變數 i 是存在 for 迴圈的隱含區塊裡.
執行結果 :
sam!
D , 100
A , 97
N , 110
I , 105
E , 101
L , 108
33
daniel!
for , if , switch 除了本體的程式區塊之外,還有另外的隱含區塊
package main
import (
	"fmt"
)
func retx() int {
	return 3
}
func rety() int {
	return 5
}
func main() {
	if x := retx(); x == 3 {
		fmt.Println(x)  //本體程式區塊
	} else if y := rety(); x == y { // 隱含區塊
		fmt.Println(x, y)
	} else {
		fmt.Println(x, y)
	}
	//fmt.Println(x, y) // compiler error undefined: x, y
}